Golang
goroutine
我自己理解goroutine 就很類似其他語言的thread[備註1],只是特別的地方是go 用 goroutine很簡易的方式去讓開發者 實現多執行緒[備註2]程式
來點範例
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("a")
//say("a")
say("b")
}
這對於比較常寫PHP的我,真的實在太驚人了!!!!!
Channel
Goroutine的溝通主要可以透過channel、全域變數進行操作。
package main
import (
"fmt"
"time"
)
func say(s string, val chan int) {
for i := 0; i < 2; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Printf("say %s \n" ,s)
}
val <- 1 //注入資料1
}
func say2(s string, val chan int) {
for i := 0; i < 2; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Printf("say2 %s \n" ,s)
}
val <- 2 //注入資料1
}
func main() {
val := make(chan int)
go say("a", val )
go say2("a", val )
x := <-val // receive from c
fmt.Println(x)
}
直接來改看看,雖然這支是沒啥意義的程式,但可以看得出來是共享x,然後多跑幾次就會發現誰搶贏誰搶輸了
備註:
參考資料
https://zh.wikipedia.org/zh-tw/%E7%BA%BF%E7%A8%8B